package thread;
//什么是juc?
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池
 * 线程池是线程的管理机制，主要解决两方面问题：
 * 1：重复使用线程，避免浪费
 * 2：控制线程数量，避免资源过度消耗，以及CPU过度切换导致卡顿等问题
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //创建具有2条线程的线程池
        ExecutorService threadPool = Executors.newFixedThreadPool(2);

        for (int i = 0; i < 5; i++){
            Runnable r = new Runnable() {//方法二：Runnable r = () ->{
                @Override
                public void run() {
                    try{
                        Thread t = Thread.currentThread();
                        System.out.println(t.getName()+":正在执行一个任务...");
                        Thread.sleep(5000);
                        System.out.println(t.getName()+":任务执行完毕...");
                    }
                    catch (InterruptedException e){
                        e.printStackTrace();
                    }
                }
            };
            threadPool.execute(r);
            System.out.println("将一个任务交给了线程池");
        }
        //线程池不再接受新任务，线程池内部任务都执行完毕后结束
        //threadPool.shutdown();//停止线程池

        //线程池会立即调用所有内部线程的中断方法让线程池尽快停止
        threadPool.shutdownNow();//立即停止线程池
        System.out.println("停止线程池");

    }
}
